//package com.tanger.im;
//
//import com.brt.base.common.utils.JSON;
//import com.fasterxml.jackson.databind.JsonNode;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.bind.annotation.RequestParam;
//
//import javax.websocket.*;
//import javax.websocket.server.ServerEndpoint;
//import java.io.IOException;
//import java.util.*;
//import java.util.concurrent.ConcurrentHashMap;
//
///**
// * @Description 聊天socket
// * @Author Hchenbin
// * @Date 2023/6/21 15:19
// * @Version 1.0
// */
//@Slf4j
//@Component
//@ServerEndpoint(value = "/chat_websocket/many/{userId}")
//public class IMUserGroupWebSocket {
//
//    private static Map<Long,Map<Long, IMUserGroupWebSocket>> roomMap = new  ConcurrentHashMap<>();
//    private Session session;
//    //重新加入房间的标示；
//    private int rejoin = 0;
//
//    @OnOpen
//    public void onOpen(Session session, @RequestParam("t") String t){
//        this.session = session;
//        JsonNode node = JSON.parse(t, JsonNode.class);
//        if (Objects.nonNull(node)) {
//            //标识 1.加入 0.保持 2.退出 3.加入并发起信息
//            int flag = node.get("flag").asInt();
//            Long groupId = node.get("groupId").asLong();
//            if(flag == 1){
//                Long userId = node.get("userId").asLong();
//                join(groupId,userId);
//            }
//        }
//    }
//
//    /**
//     * 进入群聊
//     * @param groupId
//     * @param userId
//     */
//    public void join(Long groupId,Long userId){
//        Map<Long, IMUserGroupWebSocket> r =  roomMap.get(groupId);
//        //判断用户是否存在
//        if(r.get(userId) != null){
//            this.rejoin = 1;
//        }
//        //进入群聊
//        r.put(userId, this);
//    }
//
//    public void sendMessage(String message) throws IOException {
//        this.session.getBasicRemote().sendText(message);
//    }
//
//    /**
//     * 接收到来自用户的消息
//     * @param msg
//     * @param session
//     * @throws IOException
//     */
//    @OnMessage
//    public void onMessage(Session session, String msg) throws IOException{
//        JsonNode node = JSON.parse(msg,JsonNode.class);
//        if (Objects.nonNull(node)) {
//            int flag = node.get("flag").asInt();
//            Long groupId = node.get("groupId").asLong();
//            JsonNode user = node.get("user");
//            Map<String,Object> map = new HashMap<>();
//            map.put("groupId",groupId);
//            map.put("user",user);
//            //退出
//            if (flag == 2) {
//                int f2 = 1;
//                //将用户直接移除
//                roomMap.get(groupId).remove(user.get("id").asLong());
//                //判断房间该房间是否还有用户，如果没有，则将此房间也移除
//                if (roomMap.get(groupId).size() == 0) {
//                    f2 = 2;
//                }
//                //存在用户
//                if (f2 == 1) {
//                    map.put("flag", 2);
//                    map.put("content", user.get("name").asText() + " 退出了房间");
//                    map.put("createTime",System.currentTimeMillis());
//                    Map<Long, IMUserGroupWebSocket> r = roomMap.get(groupId);
//                    List<Long> ids = new ArrayList<>();
//                    for (Long u : r.keySet()) {
//                        ids.add(u);
//                    }
////                    map.put("userIds", ids.toArray());
//                    for (Long i : r.keySet()) {  //遍历该房间
//                        r.get(i).sendMessage(map.toString());
//                    }
//                }
//            } else if (flag == 3) { //加入房间/发送消息
//                map.put("flag", 3);
//                map.put("createTime",System.currentTimeMillis());
//                //从房间列表中定位到该房间
//                Map<Long, IMUserGroupWebSocket> r = roomMap.get(groupId);
//                List<Long> ids = new ArrayList<>();
//                for (Long u : r.keySet()) {
//                    ids.add(u);
//                }
////                    map.put("userIds", ids.toArray());
//                Long userId = user.get("id").asLong();
//                if (r.get(userId).rejoin == 0) { //不是退出重连
//                    for (Long i : r.keySet()) {  //遍历该房间
//                        map.put("isSelf", ids.toArray());
//                        map.put("isSelf", userId.equals(i));//设置消息是否为自己的
//                        r.get(i).sendMessage(map.toString());
//                    }
//                } else {
//                    map.put("isSelf", true);
//                    r.get(userId).sendMessage(map.toString());
//                }
//                r.get(userId).rejoin = 0;
//            }
//        }
//    }
//
//    @OnClose
//    public void onClose(Session session){}
//
//    @OnError
//    public void onError(Throwable t){}
//}